
[dbo].[asi_SalesTeamAddDateRange]
CREATE PROCEDURE [dbo].[asi_SalesTeamAddDateRange] (@salesTeamKey uniqueidentifier, @newStartDate datetime, @userKey uniqueidentifier)
AS
BEGIN
SET NOCOUNT ON
DECLARE @DetailCount int
IF (SELECT COUNT(*) FROM GroupMemberDetail WHERE GroupKey = @salesTeamKey) < 1
BEGIN
SELECT -1
RETURN -1
END
IF (DATEDIFF(day,@newStartDate,(SELECT MIN(EffectiveDate) FROM GroupMemberDetail WHERE GroupKey = @salesTeamKey)) > 0)
BEGIN
SELECT -2
RETURN -2
END
SELECT @DetailCount = COUNT(*) FROM GroupMemberDetail WHERE GroupKey = @salesTeamKey AND DATEDIFF(day,EffectiveDate,@newStartDate) IN (0,1) OR DATEDIFF(day,@newStartDate,ExpirationDate) = 0
IF @DetailCount > 0
BEGIN
SELECT -4
RETURN -4
END
BEGIN TRANSACTION
CREATE TABLE #tmpGroupMemberDetail (GroupMemberKey uniqueidentifier,GroupRoleKey uniqueidentifier,EffectiveDate datetime,
ExpirationDate datetime,TypeSpecificData nvarchar(250),TypeSpecificKey uniqueidentifier,TypeSpecificFlag bit,
CreatedOn datetime,CreatedByUserKey uniqueidentifier,UpdatedOn datetime,UpdatedByUserKey uniqueidentifier,
TypeSpecificInt int,GroupMemberStatusCode nvarchar(4),IsActive bit,GroupMemberDetailKey uniqueidentifier,
GroupKey uniqueidentifier)
DECLARE @nextEffectiveDate datetime
SELECT @nextEffectiveDate = MIN(EffectiveDate) FROM GroupMemberDetail WHERE GroupKey = @salesTeamKey AND EffectiveDate > @newStartDate
INSERT INTO #tmpGroupMemberDetail(GroupMemberKey,GroupRoleKey,EffectiveDate,ExpirationDate,TypeSpecificData,TypeSpecificKey,TypeSpecificFlag,CreatedOn,CreatedByUserKey,
UpdatedOn,UpdatedByUserKey,TypeSpecificInt,GroupMemberStatusCode,IsActive,GroupMemberDetailKey,GroupKey)
Select GroupMemberKey,GroupRoleKey,@newStartDate,DATEADD(day,-1,@nextEffectiveDate),TypeSpecificData,TypeSpecificKey,TypeSpecificFlag,GetDate(),@userKey,
GetDate(),@userKey,TypeSpecificInt,GroupMemberStatusCode,IsActive,NEWID(),GroupKey
From GroupMemberDetail
WHERE GroupKey = @salesTeamKey AND
(@newStartDate BETWEEN EffectiveDate AND ExpirationDate OR (ExpirationDate IS NULL AND DATEDIFF(day,EffectiveDate,@newStartDate) > 0))
Order by EffectiveDate, GroupMemberKey
UPDATE GroupMemberDetail
SET ExpirationDate = DATEADD(day,-1,@newStartDate), UpdatedOn = GetDate(), UpdatedByUserKey = @userKey
WHERE GroupKey = @salesTeamKey AND
(@newStartDate BETWEEN EffectiveDate AND ExpirationDate OR (ExpirationDate IS NULL AND DATEDIFF(day,EffectiveDate,@newStartDate) > 0))
INSERT INTO GroupMemberDetail(GroupMemberKey,GroupRoleKey,EffectiveDate,ExpirationDate,TypeSpecificData,TypeSpecificKey,TypeSpecificFlag,CreatedOn,CreatedByUserKey,
UpdatedOn,UpdatedByUserKey,TypeSpecificInt,GroupMemberStatusCode,IsActive,GroupMemberDetailKey,GroupKey)
Select GroupMemberKey,GroupRoleKey,EffectiveDate,ExpirationDate,TypeSpecificData,TypeSpecificKey,TypeSpecificFlag,CreatedOn,CreatedByUserKey,
UpdatedOn,UpdatedByUserKey,TypeSpecificInt,GroupMemberStatusCode,IsActive,GroupMemberDetailKey,GroupKey
From #tmpGroupMemberDetail
COMMIT
SELECT 0
DROP TABLE #tmpGroupMemberDetail
SET NOCOUNT OFF
END
GO